package com.shujia.scala

object Demo9Trait {
  def main(args: Array[String]): Unit = {

    val dog = new Dog

    dog.print()

    dog.cry()


    /**
      * 父类的引用执行子类的对象
      *
      */

    val cat: Cry = new Cat

    cat.cry()
    cat.print()

  }
}

/**
  * scala中的特征，trait可以写抽象方法也可以写普通方法
  *
  */

trait Cry {
  /**
    * 抽象方法
    *
    */
  def print()

  /**
    * 普通方法
    *
    */
  def cry(): Unit = {
    println("动物叫")
  }
}


class Dog() extends Cry {
  /**
    * 实现特征中的抽象方法
    *
    */

  override def print(): Unit = {
    println("狗叫")
  }
}


class Cat() extends Cry {
  /**
    * 实现特征中的抽象方法
    *
    */
  override def print(): Unit = {
    println("猫叫")
  }
}
